/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 文件名：	IBOptionMgr.java
 * 模块说明：	
 * 修改历史：
 * 2007-3-20 - lxm - 创建。
 */
package com.hd123.rumba.option.biz;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.domain.IDomain;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.option.COptionalClassInfo;
import com.hd123.rumba.runtime.OperateContext;
import com.hd123.rumba.runtime.biz.BPersistent;
import com.hd123.rumba.runtime.biz.IBManager;
import com.hd123.rumba.user.IUser;
import com.hd123.rumba.util.ClassifiedHashtable;

/**
 * 选项 | 业务层 | 管理员 | 接口类
 * 
 * @author lxm
 * 
 */
public interface IBOptionMgr extends IBManager {

  public static final Integer VALUE_INDIVIDUATION_DOMAIN = COptionalClassInfo.VALUE_INDIVIDUATION_DOMAIN;
  public static final Integer VALUE_INDIVIDUATION_USER = COptionalClassInfo.VALUE_INDIVIDUATION_USER;

  /**
   * 注册一个选项类信息。
   * 
   * @param optionalClass
   *          指定选项类。
   * @param individuation
   *          指定个性化级别。可选值参见常量VALUE_INDIVIDUATION_*。
   * @param locked
   *          指定是否默认为锁定状态。
   * @param online
   *          指定是否默认为启用状态。
   * @throws BusinessException
   * @throws HibernateException
   */
  public void registerClassInfoT(Class optionalClass, Integer individuation, Boolean locked,
      Boolean online) throws BusinessException, HibernateException;

  /**
   * 取消注册选项类信息。
   * 
   * @param optionalClass
   *          指定选项类。
   * @throws BusinessException
   * @throws HibernateException
   */
  public void unregisterClassInfoT(Class optionalClass) throws BusinessException,
      HibernateException;

  /**
   * 创建一个选项取值集合对象。
   * 
   * @param domainUuid
   *          指定所属域的uuid。
   * @param optionalClassName
   *          指定选项类名。
   * @param userUuid
   *          指定所属用户uuid，允许传入null，表示创建的是全局的选项取值集合对象。
   * @return 返回创建的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BOptionCollection createCollection(String domainUuid, String optionalClassName,
      String userUuid) throws BusinessException, HibernateException;

  /**
   * 创建一个选项取值集合对象。
   * 
   * @param domain
   *          指定所属域。
   * @param optionalClassName
   *          指定选项类名。
   * @param user
   *          指定所属用户，允许传入null，表示创建的是全局的选项取值集合对象。
   * @return 返回创建的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BOptionCollection createCollection(IDomain domain, String optionalClassName, IUser user)
      throws BusinessException, HibernateException;

  /**
   * 创建一个选项取值集合对象。
   * 
   * @param <O>
   * @param domainUuid
   *          指定所属域uuid。
   * @param optionClass
   *          指定选项类。
   * @param userUuid
   *          指定所属用户uuid，允许传入null，表示创建的是全局的选项取值集合对象。
   * @return 返回创建的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <O extends BOptionCollection> O createCollection(String domainUuid, Class<O> optionClass,
      String userUuid) throws BusinessException, HibernateException;

  /**
   * 创建一个选项取值集合对象。
   * 
   * @param <O>
   * @param domain
   *          指定所属域。
   * @param optionClass
   *          指定选项类。
   * @param user
   *          指定所属用户，允许传入null，表示创建的是全局的选项取值集合对象。
   * @return 返回创建的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <O extends BOptionCollection> O createCollection(IDomain domain, Class<O> optionClass,
      IUser user) throws BusinessException, HibernateException;

  /**
   * 载入选项取值集合对象。
   * 
   * @param uuid
   *          指定选项取值集合对象uuid。
   * @return 返回取得的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BOptionCollection loadCollection(String uuid) throws BusinessException, HibernateException;

  /**
   * 载入选项取值集合对象。
   * 
   * @param <O>
   * @param domain
   *          指定所属域。
   * @param optionClass
   *          指定选项类。
   * @param user
   *          指定用户。允许传入null，表示查找的是全局选项取值。
   * @return 返回取得的选项取值对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <O extends BOptionCollection> O loadCollection(IDomain domain,
      Class<O> optionClass, IUser user) throws BusinessException, HibernateException;

  /**
   * 载入选项取值集合对象。
   * 
   * @param domain
   *          指定所属域。
   * @param optionalClassName
   *          指定选项类名。
   * @param user
   *          指定用户。允许传入null，表示查找的是全局选项取值。
   * @return 返回取得的选项取值对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BOptionCollection loadCollection(IDomain domain, String optionalClassName, IUser user)
      throws BusinessException, HibernateException;

  /**
   * 载入选项取值集合对象。
   * 
   * @param <O>
   * @param domainUuid
   *          指定所属域uuid。
   * @param optionClass
   *          指定选项类。
   * @param userUuid
   *          指定用户uuid。允许传入null，表示查找的是全局选项取值。
   * @return 返回取得的选项取值对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <O extends BOptionCollection> O loadCollection(String domainUuid,
      Class<O> optionClass, String userUuid) throws BusinessException, HibernateException;

  /**
   * 载入选项取值集合对象。
   * 
   * @param domainUuid
   *          指定所属域uuid。
   * @param optionalClassName
   *          指定选项类名。
   * @param userUuid
   *          指定用户uuid。允许传入null，表示查找的是全局选项取值。
   * @return 返回取得的选项取值对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BOptionCollection loadCollection(String domainUuid,
      String optionalClassName, String userUuid) throws BusinessException, HibernateException;

  /**
   * 保存选项取值集合对象到数据库。
   * 
   * @param collection
   *          指定被保存的选项取值集合对象。
   * @param operate
   * @return 返回错误信息列表。若执行成功返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable saveCollection(BOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 清除指定的选项取值，即设定选项取值从其上级继承。
   * 
   * @param collection
   *          指定将被清除所有取值的选项取值集合对象。
   * @param operate
   * @return 返回错误信息列表。若执行成功返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable clearCollection(BOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 锁定所有用户个性化设置。使得所有用户被禁止修改相应选项的个性化设置。
   * 
   * @param collection
   *          指定的选项取值集合对象，要求必须是全局取值对象，即user==null。
   * @param operate
   * @return 返回错误信息列表。若执行成功返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable lockCollection(BOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 解除锁定所有用户个性化设置。使得所有用户可以重新修改相应选项的个性化设置。
   * 
   * @param collection
   *          指定的选项取值集合对象，要求必须是全局取值对象，即user==null。
   * @param operate
   * @return 返回错误信息列表。若执行成功返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable unlockCollection(BOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 禁用所有用户个性化设置。使得所有用户相应选项的个性化设置失效。
   * 
   * @param collection
   *          指定的选项取值集合对象，要求必须是全局取值对象，即user==null。
   * @param operate
   * @return 返回错误信息列表。若执行成功返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable offlineCollection(BOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 启用所有用户个性化设置。使得所有用户相应选项的个性化设置生效。
   * 
   * @param collection
   *          指定的选项取值集合对象，要求必须是全局取值对象，即user==null。
   * @param operate
   * @return 返回错误信息列表。若执行成功返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable onlineCollection(BOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 根据uuid取得选项取值集合对象。
   * 
   * @param uuid
   *          指定选项取值集合对象的uuid。
   * @param bizClasss
   * @return 返回取得的数据对象，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <O extends BPersistent> O getCollection(String uuid, Class<O> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 根据选项类查找指定的选项取值集合对象。
   * 
   * @param domainUuid
   *          指定所属域的uuid。
   * @param optionalClassName
   *          指定选项类名。
   * @param userUuid
   *          指定所属用户的uuid，允许传入null，表示查找的是全局选项取值。
   * @param bizClass
   * @return 返回符合条件的数据对象，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <O extends BPersistent> O getCollectionByClass(String domainUuid,
      String optionalClassName, String userUuid, Class<O> bizClass) throws BusinessException,
      HibernateException;

  /**
   * 根据选项类查找指定的选项取值集合对象。
   * 
   * @param <O>
   * @param domain
   *          指定所属域。
   * @param optionalClassName
   *          指定选项类名。
   * @param user
   *          指定所属用户，允许传入null，表示查找的是全局选项取值。
   * @param bizClass
   * @return 返回符合条件的数据对象，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <O extends BPersistent> O getCollectionByClass(IDomain domain, String optionalClassName,
      IUser user, Class<O> bizClass) throws BusinessException, HibernateException;
}
